## rows columns discrete_columns continuous_columns all_missing_columns
## 1 2380 37 26 11 0
## total_missing_values complete_rows total_observations memory_usage
## 1 0 2380 88060 1060944
## 'data.frame': 2380 obs. of 37 variables:
## $ data : chr "2021-01-01" "2021-01-01" "2021-01-02" "2021-01-02" ...
## $ hora : chr "19:44:00" "23:15:40" "10:54:00" "11:13:00" ...
## $ natureza_acidente : chr "COM VÍTIMA" "COM VÍTIMA" "COM VÍTIMA" "COM VÍTIMA" ...
## $ situacao : chr "FINALIZADA" "FINALIZADA" "FINALIZADA" "FINALIZADA" ...
## $ bairro : chr "MADALENA" "VÁRZEA" "VASCO DA GAMA" "BOA VIAGEM" ...
## $ endereco : chr "RUA BENFICA" "AV CAXANGA" "RUA RESPLENDOR" "RUA VISCONDE DE JEQUITINHONHA" ...
## $ numero : chr "" "" "353" "22" ...
## $ detalhe_endereco_acidente: chr "" "RUA GASTAO VIDIGAL" "" "RUA CAPITAO ZUZINHA" ...
## $ complemento : chr "EM FRENTE AO EXTRA NA SAIDA" "EM FRENTE A UPA DA CAXANGA" "AO LADO DO COLEGIO ADERBAL GALVÃO EM FRENTE AO CONJUNTO RESIDENCIAL ADERBAL GALVÃO" "RUA CAPITÃO ZUZINHA" ...
## $ bairro_cruzamento : chr "MADALENA" "VÁRZEA" "VASCO DA GAMA" "BOA VIAGEM" ...
## $ num_semaforo : chr "" "281" "" "" ...
## $ sentido_via : chr "SUBURBIO" "CIDADE" "" "SUBURBIO" ...
## $ tipo : chr "COLISÃO FRONTAL" "COLISÃO TRASEIRA" "COLISÃO COM CICLISTA" "COLISÃO LATERAL" ...
## $ auto : int 1 2 1 1 1 1 1 2 2 1 ...
## $ moto : int 1 0 1 1 1 0 1 0 0 1 ...
## $ ciclom : int 0 0 0 0 0 0 0 0 0 0 ...
## $ ciclista : int 0 0 1 0 0 0 0 0 0 0 ...
## $ pedestre : int 0 0 0 0 0 0 0 0 0 0 ...
## $ onibus : int 0 0 0 0 0 0 0 0 0 0 ...
## $ caminhao : int 0 0 0 0 0 0 0 0 0 0 ...
## $ viatura : int 0 0 0 0 0 0 0 0 0 0 ...
## $ outros : int 0 0 0 0 0 0 0 0 0 0 ...
## $ vitimas : int 1 1 1 1 2 0 1 0 0 1 ...
## $ vitimasfatais : int 0 0 0 0 0 0 0 0 0 0 ...
## $ acidente_verificado : chr "Longo da via" "Cruzamento" "Longo da via" "Longo da via" ...
## $ tempo_clima : chr "Bom" "Bom" "Bom" "Bom" ...
## $ situacao_semaforo : chr "Não existe" "Sem defeito" "Não existe" "Sem defeito" ...
## $ sinalizacao : chr "Perfeito estado" "Perfeito estado" "Incompleta" "Perfeito estado" ...
## $ condicao_via : chr "Seca" "Oleosa" "Seca" "Seca" ...
## $ conservacao_via : chr "Perfeito estado" "Perfeito estado" "Perfeito estado" "Perfeito estado" ...
## $ ponto_controle : chr "Outros" "Outros" "Não existe" "Faixa de pedestre" ...
## $ situacao_placa : chr "Não há placas" "Outras" "Não há placas" "Outras" ...
## $ velocidade_max_via : chr "" "" "" "" ...
## $ mao_direcao : chr "Dupla" "Única" "Dupla" "Única" ...
## $ divisao_via1 : chr "Faixa contínua" "Não existe" "Não existe" "Canal" ...
## $ divisao_via2 : chr "Faixa seccionada" "" "" "" ...
## $ divisao_via3 : chr "" "" "" "" ...
names(sinistrosRecifeRaw) <- tolower(names(sinistrosRecifeRaw))
sinistrosRecifeRaw$data <- as.Date(sinistrosRecifeRaw$data, format = "%Y-%m-%d")
sinistrosRecifeRaw$ano <- as.integer(format(sinistrosRecifeRaw$data, "%Y"))
sinistrosRecifeRaw$mes <- as.integer(format(sinistrosRecifeRaw$data, "%m"))
sinistrosRecifeRaw$dia <- as.integer(format(sinistrosRecifeRaw$data, "%d"))
#variaveis auxiliares para tratamento do campo hora
time_06 <- as.POSIXct("06:00", format = "%H:%M")
time_12 <- as.POSIXct("12:00", format = "%H:%M")
time_18 <- as.POSIXct("18:00", format = "%H:%M")
time_2359 <- as.POSIXct("23:59", format = "%H")
time_00 <- as.POSIXct("00:00", format = "%H:%M")
#Extraindo o intervalo do dia a partir do campo hora
sinistrosRecifeRaw <- sinistrosRecifeRaw %>%
mutate(intervalo_dia = case_when(
as.POSIXct(hora, format = "%H:%M") >= time_06 & as.POSIXct(hora, format = "%H:%M") < time_12 ~ "MANHA",
as.POSIXct(hora, format = "%H:%M") >= time_12 & as.POSIXct(hora, format = "%H:%M") < time_18 ~ "TARDE",
as.POSIXct(hora, format = "%H:%M") >= time_18 & as.POSIXct(hora, format = "%H") <= time_2359 ~ "NOITE",
as.POSIXct(hora, format = "%H:%M") >= time_00 & as.POSIXct(hora, format = "%H:%M") < time_06 ~ "MADRUGADA",
TRUE ~ "NAO INFORMADO"
)
)
#removendo variaveis auxiliares para tratamento do campo hora
rm(time_06, time_12, time_18,time_2359, time_00)
#Extraindo o dia da semana a partir do campo data
sinistrosRecifeRaw$dia_semana <- weekdays(as.Date(sinistrosRecifeRaw$data))
#criando uma coluna a partir de varias usando a função coalesce
sinistrosRecifeRaw <- sinistrosRecifeRaw %>%
mutate(automoveis = coalesce(auto, onibus, caminhao, viatura, ciclom)) %>%
mutate(divisao_da_via = coalesce(divisao_via1, divisao_via2, divisao_via3)) %>%
mutate(outros_envolvidos = coalesce(outros, ciclista, pedestre)
)
# remove as colunas que já foram unificadas e não serão necessarias mais pra frente
sinistrosRecifeRaw <- sinistrosRecifeRaw %>%
select( -c("auto", "onibus", "caminhao", "viatura", "ciclom","divisao_via1","divisao_via2","divisao_via3", "outros", "ciclista", "pedestre"))
# transforma todos os valores em "maiusculas"
sinistrosRecifeRaw$natureza_acidente <- toupper(sinistrosRecifeRaw$natureza_acidente)
sinistrosRecifeRaw$situacao <- toupper(sinistrosRecifeRaw$situacao)
sinistrosRecifeRaw$bairro <- toupper(sinistrosRecifeRaw$bairro)
sinistrosRecifeRaw$sentido_via <- toupper(sinistrosRecifeRaw$sentido_via)
sinistrosRecifeRaw$tipo <- toupper(sinistrosRecifeRaw$tipo)
sinistrosRecifeRaw$intervalo_dia <- toupper(sinistrosRecifeRaw$intervalo_dia)
sinistrosRecifeRaw$dia_semana <- toupper(sinistrosRecifeRaw$dia_semana)
sinistrosRecifeRaw$acidente_verificado <- toupper(sinistrosRecifeRaw$acidente_verificado)
sinistrosRecifeRaw$tempo_clima <- toupper(sinistrosRecifeRaw$tempo_clima)
sinistrosRecifeRaw$situacao_semaforo <- toupper(sinistrosRecifeRaw$situacao_semaforo)
sinistrosRecifeRaw$sinalizacao <- toupper(sinistrosRecifeRaw$sinalizacao)
sinistrosRecifeRaw$condicao_via <- toupper(sinistrosRecifeRaw$condicao_via)
sinistrosRecifeRaw$conservacao_via <- toupper(sinistrosRecifeRaw$conservacao_via)
sinistrosRecifeRaw$ponto_controle <- toupper(sinistrosRecifeRaw$ponto_controle)
sinistrosRecifeRaw$situacao_placa <- toupper(sinistrosRecifeRaw$situacao_placa)
sinistrosRecifeRaw$velocidade_max_via <- toupper(sinistrosRecifeRaw$velocidade_max_via)
sinistrosRecifeRaw$mao_direcao <- toupper(sinistrosRecifeRaw$mao_direcao)
sinistrosRecifeRaw$divisao_da_via <- toupper(sinistrosRecifeRaw$divisao_da_via)
#criando a coluna de rotulo(o "y" usada nos modelos)
sinistrosRecifeFinal <- sinistrosRecifeRaw %>%
mutate(acidente_com_vitima = case_when(
natureza_acidente == 'COM VÍTIMA' ~ 1,
natureza_acidente == 'VÍTIMA FATAL' ~ 1,
TRUE ~ 0
)
)
sinistrosRecifeFinal$acidente_com_vitima <- as.integer(sinistrosRecifeFinal$acidente_com_vitima)
# movendo o rotulo("y") para a primeira posicao do dataset
sinistrosRecifeFinal <- sinistrosRecifeFinal %>% select(acidente_com_vitima, everything())
# preenchendo valores faltantes checando se o tamanho do conteudo preenchido é menor que 1
sinistrosRecifeFinal$bairro[str_length(sinistrosRecifeFinal$bairro) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$sentido_via[str_length(sinistrosRecifeFinal$sentido_via) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$tipo[str_length(sinistrosRecifeFinal$tipo) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$intervalo_dia[str_length(sinistrosRecifeFinal$intervalo_dia) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$dia_semana[str_length(sinistrosRecifeFinal$dia_semana) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$tempo_clima[str_length(sinistrosRecifeFinal$tempo_clima) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$situacao_semaforo[str_length(sinistrosRecifeFinal$situacao_semaforo) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$situacao_placa[str_length(sinistrosRecifeFinal$situacao_placa) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$velocidade_max_via[str_length(sinistrosRecifeFinal$velocidade_max_via) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$divisao_da_via[str_length(sinistrosRecifeFinal$divisao_da_via) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$situacao[str_length(sinistrosRecifeFinal$situacao) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$natureza_acidente[str_length(sinistrosRecifeFinal$natureza_acidente) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$acidente_verificado[str_length(sinistrosRecifeFinal$acidente_verificado) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$sinalizacao[str_length(sinistrosRecifeFinal$sinalizacao) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$conservacao_via[str_length(sinistrosRecifeFinal$conservacao_via) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$condicao_via[str_length(sinistrosRecifeFinal$condicao_via) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$ponto_controle[str_length(sinistrosRecifeFinal$ponto_controle) < 1 ] <- "NAO INFORMADO"
sinistrosRecifeFinal$mao_direcao[str_length(sinistrosRecifeFinal$mao_direcao) < 1 ] <- "NAO INFORMADO"
## variable q_zeros p_zeros q_na
## acidente_com_vitima acidente_com_vitima 546 0.2294117647 0
## data data 0 0.0000000000 0
## hora hora 0 0.0000000000 0
## natureza_acidente natureza_acidente 0 0.0000000000 0
## situacao situacao 0 0.0000000000 0
## bairro bairro 0 0.0000000000 0
## endereco endereco 0 0.0000000000 0
## numero numero 0 0.0000000000 0
## detalhe_endereco_acidente detalhe_endereco_acidente 0 0.0000000000 0
## complemento complemento 0 0.0000000000 0
## bairro_cruzamento bairro_cruzamento 0 0.0000000000 0
## num_semaforo num_semaforo 1 0.0004201681 0
## sentido_via sentido_via 0 0.0000000000 0
## tipo tipo 0 0.0000000000 0
## moto moto 946 0.3974789916 0
## vitimas vitimas 557 0.2340336134 0
## vitimasfatais vitimasfatais 2355 0.9894957983 0
## acidente_verificado acidente_verificado 0 0.0000000000 0
## tempo_clima tempo_clima 0 0.0000000000 0
## situacao_semaforo situacao_semaforo 0 0.0000000000 0
## sinalizacao sinalizacao 0 0.0000000000 0
## condicao_via condicao_via 0 0.0000000000 0
## conservacao_via conservacao_via 0 0.0000000000 0
## ponto_controle ponto_controle 0 0.0000000000 0
## situacao_placa situacao_placa 0 0.0000000000 0
## velocidade_max_via velocidade_max_via 0 0.0000000000 0
## mao_direcao mao_direcao 0 0.0000000000 0
## ano ano 0 0.0000000000 0
## mes mes 0 0.0000000000 0
## dia dia 0 0.0000000000 0
## intervalo_dia intervalo_dia 0 0.0000000000 0
## dia_semana dia_semana 0 0.0000000000 0
## automoveis automoveis 645 0.2710084034 0
## divisao_da_via divisao_da_via 0 0.0000000000 0
## outros_envolvidos outros_envolvidos 2365 0.9936974790 0
## p_na q_inf p_inf type unique
## acidente_com_vitima 0 0 0 integer 2
## data 0 0 0 Date 363
## hora 0 0 0 character 1019
## natureza_acidente 0 0 0 character 4
## situacao 0 0 0 character 4
## bairro 0 0 0 character 89
## endereco 0 0 0 character 551
## numero 0 0 0 character 909
## detalhe_endereco_acidente 0 0 0 character 505
## complemento 0 0 0 character 2115
## bairro_cruzamento 0 0 0 character 89
## num_semaforo 0 0 0 character 333
## sentido_via 0 0 0 character 42
## tipo 0 0 0 character 21
## moto 0 0 0 integer 5
## vitimas 0 0 0 integer 7
## vitimasfatais 0 0 0 integer 2
## acidente_verificado 0 0 0 character 8
## tempo_clima 0 0 0 character 4
## situacao_semaforo 0 0 0 character 6
## sinalizacao 0 0 0 character 5
## condicao_via 0 0 0 character 5
## conservacao_via 0 0 0 character 5
## ponto_controle 0 0 0 character 6
## situacao_placa 0 0 0 character 21
## velocidade_max_via 0 0 0 character 12
## mao_direcao 0 0 0 character 3
## ano 0 0 0 integer 1
## mes 0 0 0 integer 12
## dia 0 0 0 integer 31
## intervalo_dia 0 0 0 character 4
## dia_semana 0 0 0 character 7
## automoveis 0 0 0 integer 8
## divisao_da_via 0 0 0 character 9
## outros_envolvidos 0 0 0 integer 3
# Junta os dados das duas fontes acima a partir das colunas ["bairro"] existente em cada fonte
sinistrosRecifeFinal <- left_join(sinistrosRecifeFinal, numero_acidentes_com_vitimas_por_bairro, by = c("bairro" = "bairro"))
#Se algum bairro nao apresente total de acidentes c/vitimas será preenchido com ZERO (0) para evitar o NA value
sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro <-
replace(
sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro,
is.na(sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro),
0
)
#ncol(sinistrosRecifeFinal)
#nrow(sinistrosRecifeFinal)
head(sinistrosRecifeFinal, 5)
## acidente_com_vitima data hora natureza_acidente situacao
## 1 1 2021-01-01 19:44:00 COM VÍTIMA FINALIZADA
## 2 1 2021-01-01 23:15:40 COM VÍTIMA FINALIZADA
## 3 1 2021-01-02 10:54:00 COM VÍTIMA FINALIZADA
## 4 1 2021-01-02 11:13:00 COM VÍTIMA FINALIZADA
## 5 1 2021-01-03 09:32:00 COM VÍTIMA FINALIZADA
## bairro endereco numero
## 1 MADALENA RUA BENFICA
## 2 VÁRZEA AV CAXANGA
## 3 VASCO DA GAMA RUA RESPLENDOR 353
## 4 BOA VIAGEM RUA VISCONDE DE JEQUITINHONHA 22
## 5 ILHA DO RETIRO AV ENGENHEIRO ABDIAS DE CARVALHO 365
## detalhe_endereco_acidente
## 1
## 2 RUA GASTAO VIDIGAL
## 3
## 4 RUA CAPITAO ZUZINHA
## 5
## complemento
## 1 EM FRENTE AO EXTRA NA SAIDA
## 2 EM FRENTE A UPA DA CAXANGA
## 3 AO LADO DO COLEGIO ADERBAL GALVÃO EM FRENTE AO CONJUNTO RESIDENCIAL ADERBAL GALVÃO
## 4 RUA CAPITÃO ZUZINHA
## 5 EM FRENTE A LANCHONETE COXINHAS DE BATATA
## bairro_cruzamento num_semaforo sentido_via tipo moto
## 1 MADALENA SUBURBIO COLISAO 1
## 2 VÁRZEA 281 CIDADE COLISAO 0
## 3 VASCO DA GAMA NAO INFORMADO COLISAO COM CICLISTA 1
## 4 BOA VIAGEM SUBURBIO COLISAO 1
## 5 ILHA DO RETIRO NAO INFORMADO COLISAO 1
## vitimas vitimasfatais acidente_verificado tempo_clima situacao_semaforo
## 1 1 0 LONGO DA VIA BOM NÃO EXISTE
## 2 1 0 CRUZAMENTO BOM SEM DEFEITO
## 3 1 0 LONGO DA VIA BOM NÃO EXISTE
## 4 1 0 LONGO DA VIA BOM SEM DEFEITO
## 5 2 0 LONGO DA VIA BOM SEM DEFEITO
## sinalizacao condicao_via conservacao_via ponto_controle situacao_placa
## 1 PERFEITO ESTADO SECA PERFEITO ESTADO OUTROS NÃO HÁ PLACAS
## 2 PERFEITO ESTADO OLEOSA PERFEITO ESTADO OUTROS OUTRAS
## 3 INCOMPLETA SECA PERFEITO ESTADO NÃO EXISTE NÃO HÁ PLACAS
## 4 PERFEITO ESTADO SECA PERFEITO ESTADO FAIXA DE PEDESTRE OUTRAS
## 5 PERFEITO ESTADO SECA PERFEITO ESTADO FAIXA DE PEDESTRE OUTRAS
## velocidade_max_via mao_direcao ano mes dia intervalo_dia dia_semana
## 1 NAO INFORMADO DUPLA 2021 1 1 NOITE SEXTA FEIRA
## 2 NAO INFORMADO ÚNICA 2021 1 1 NOITE SEXTA FEIRA
## 3 NAO INFORMADO DUPLA 2021 1 2 MANHA SÁBADO
## 4 NAO INFORMADO ÚNICA 2021 1 2 MANHA SÁBADO
## 5 60KM DUPLA 2021 1 3 MANHA DOMINGO
## automoveis divisao_da_via outros_envolvidos
## 1 1 FAIXA CONTÍNUA 0
## 2 2 NÃO EXISTE 0
## 3 1 NÃO EXISTE 0
## 4 1 CANAL 0
## 5 1 FAIXA CONTÍNUA 0
## total_acidentes_com_vitimas_por_bairro
## 1 80
## 2 34
## 3 10
## 4 198
## 5 11
rm( sinistrosRecifeRaw,
acidentes_com_vitimas_por_bairro,
acidentes_condicao_via,
acidentes_dia_semana,
acidentes_interv_dia,
bairro_acidente,
condicao_tempo_clima,
direcao_via,
distribuicao_natureza_acidente,
estado_vias,
numero_acidentes_com_vitimas_por_bairro,
ocorrencias_mes,
ocorrencias_situacao,
situacao_placa_amostra,
tipos_acidentes,
velocidade_max_via_amostra
)
sinistrosRecifeFinal <- sinistrosRecifeFinal %>% filter(situacao == 'FINALIZADA')
ncol(sinistrosRecifeFinal)
## [1] 36
nrow(sinistrosRecifeFinal)
## [1] 2096
sinistrosRecifeFinal <- sinistrosRecifeFinal %>%
select( -c("data","hora","ano", "mes", "dia","vitimas", "vitimasfatais", "bairro", "endereco", "numero", "detalhe_endereco_acidente", "complemento", "natureza_acidente", "sentido_via", "num_semaforo", "situacao", "bairro_cruzamento"))
#observa a estrutura dos dados
status(sinistrosRecifeFinal)
## variable
## acidente_com_vitima acidente_com_vitima
## tipo tipo
## moto moto
## acidente_verificado acidente_verificado
## tempo_clima tempo_clima
## situacao_semaforo situacao_semaforo
## sinalizacao sinalizacao
## condicao_via condicao_via
## conservacao_via conservacao_via
## ponto_controle ponto_controle
## situacao_placa situacao_placa
## velocidade_max_via velocidade_max_via
## mao_direcao mao_direcao
## intervalo_dia intervalo_dia
## dia_semana dia_semana
## automoveis automoveis
## divisao_da_via divisao_da_via
## outros_envolvidos outros_envolvidos
## total_acidentes_com_vitimas_por_bairro total_acidentes_com_vitimas_por_bairro
## q_zeros p_zeros q_na p_na q_inf
## acidente_com_vitima 441 0.210400763 0 0 0
## tipo 0 0.000000000 0 0 0
## moto 803 0.383110687 0 0 0
## acidente_verificado 0 0.000000000 0 0 0
## tempo_clima 0 0.000000000 0 0 0
## situacao_semaforo 0 0.000000000 0 0 0
## sinalizacao 0 0.000000000 0 0 0
## condicao_via 0 0.000000000 0 0 0
## conservacao_via 0 0.000000000 0 0 0
## ponto_controle 0 0.000000000 0 0 0
## situacao_placa 0 0.000000000 0 0 0
## velocidade_max_via 0 0.000000000 0 0 0
## mao_direcao 0 0.000000000 0 0 0
## intervalo_dia 0 0.000000000 0 0 0
## dia_semana 0 0.000000000 0 0 0
## automoveis 576 0.274809160 0 0 0
## divisao_da_via 0 0.000000000 0 0 0
## outros_envolvidos 2082 0.993320611 0 0 0
## total_acidentes_com_vitimas_por_bairro 7 0.003339695 0 0 0
## p_inf type unique
## acidente_com_vitima 0 integer 2
## tipo 0 character 11
## moto 0 integer 5
## acidente_verificado 0 character 8
## tempo_clima 0 character 4
## situacao_semaforo 0 character 6
## sinalizacao 0 character 5
## condicao_via 0 character 5
## conservacao_via 0 character 5
## ponto_controle 0 character 6
## situacao_placa 0 character 5
## velocidade_max_via 0 character 6
## mao_direcao 0 character 3
## intervalo_dia 0 character 4
## dia_semana 0 character 7
## automoveis 0 integer 6
## divisao_da_via 0 character 9
## outros_envolvidos 0 integer 3
## total_acidentes_com_vitimas_por_bairro 0 numeric 43
#definindo uma semente
set.seed(1401)
#define one-hot encoding function
sinistrosRecifeDummy <- dummyVars(" ~ .", data=sinistrosRecifeFinal)
#perform one-hot encoding on data frame
sinistrosRecifeBinarizado <- data.frame(predict(sinistrosRecifeDummy, newdata=sinistrosRecifeFinal))
# imprime o dataset final convertido em valores numéricos
# para facilitar a execução de uma Regressão Linear, por exemplo
head(sinistrosRecifeBinarizado, 3)
## acidente_com_vitima tipoATROPELAMENTO tipoCAPOTAMENTO tipoCHOQUE tipoCOLISAO
## 1 1 0 0 0 1
## 2 1 0 0 0 1
## 3 1 0 0 0 0
## tipoCOLISAO.COM.CICLISTA tipoENGAVETAMENTO tipoNAO.INFORMADO tipoOUTROS
## 1 0 0 0 0
## 2 0 0 0 0
## 3 1 0 0 0
## tipoQUEDA tipoSEMÁFORO tipoTOMBAMENTO moto acidente_verificadoCRUZAMENTO
## 1 0 0 0 1 0
## 2 0 0 0 0 1
## 3 0 0 0 1 0
## acidente_verificadoESQUINA acidente_verificadoLONGO.DA.VIA
## 1 0 1
## 2 0 0
## 3 0 1
## acidente_verificadoNAO.INFORMADO acidente_verificadoOUTROS
## 1 0 0
## 2 0 0
## 3 0 0
## acidente_verificadoPONTE acidente_verificadoROTATÓRIA
## 1 0 0
## 2 0 0
## 3 0 0
## acidente_verificadoVIADUTO tempo_climaBOM tempo_climaCHUVOSO
## 1 0 1 0
## 2 0 1 0
## 3 0 1 0
## tempo_climaNAO.INFORMADO tempo_climaNUBLADO situacao_semaforoCOM.DEFEITO
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## situacao_semaforoDESLIGADO situacao_semaforoINTERMITENTE
## 1 0 0
## 2 0 0
## 3 0 0
## situacao_semaforoNÃO.EXISTE situacao_semaforoNAO.INFORMADO
## 1 1 0
## 2 0 0
## 3 1 0
## situacao_semaforoSEM.DEFEITO sinalizacaoILEGÍVEL sinalizacaoINCOMPLETA
## 1 0 0 0
## 2 1 0 0
## 3 0 0 1
## sinalizacaoNÃO.EXISTENTE sinalizacaoNAO.INFORMADO sinalizacaoPERFEITO.ESTADO
## 1 0 0 1
## 2 0 0 1
## 3 0 0 0
## condicao_viaMOLHADA condicao_viaNAO.INFORMADO condicao_viaOLEOSA
## 1 0 0 0
## 2 0 0 1
## 3 0 0 0
## condicao_viaOUTROS condicao_viaSECA conservacao_viaMAL.CONSERVADA
## 1 0 1 0
## 2 0 0 0
## 3 0 1 0
## conservacao_viaMAL.ILUMINADA conservacao_viaNAO.INFORMADO
## 1 0 0
## 2 0 0
## 3 0 0
## conservacao_viaOUTROS conservacao_viaPERFEITO.ESTADO ponto_controleAGENTE
## 1 0 1 0
## 2 0 1 0
## 3 0 1 0
## ponto_controleFAIXA.DE.PEDESTRE ponto_controleFAIXA.DE.RETENÇÃO
## 1 0 0
## 2 0 0
## 3 0 0
## ponto_controleNÃO.EXISTE ponto_controleNAO.INFORMADO ponto_controleOUTROS
## 1 0 0 1
## 2 0 0 1
## 3 1 0 0
## situacao_placaNÃO.HÁ.PLACAS situacao_placaNAO.INFORMADO situacao_placaOUTRAS
## 1 1 0 0
## 2 0 0 1
## 3 1 0 0
## situacao_placaPLACAS.PARE situacao_placaR.6A velocidade_max_via20KM
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## velocidade_max_via30KM velocidade_max_via40KM velocidade_max_via50KM
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## velocidade_max_via60KM velocidade_max_viaNAO.INFORMADO mao_direcaoDUPLA
## 1 0 1 1
## 2 0 1 0
## 3 0 1 1
## mao_direcaoNAO.INFORMADO mao_direcaoÚNICA intervalo_diaMADRUGADA
## 1 0 0 0
## 2 0 1 0
## 3 0 0 0
## intervalo_diaMANHA intervalo_diaNOITE intervalo_diaTARDE dia_semanaDOMINGO
## 1 0 1 0 0
## 2 0 1 0 0
## 3 1 0 0 0
## dia_semanaQUARTA.FEIRA dia_semanaQUINTA.FEIRA dia_semanaSÁBADO
## 1 0 0 0
## 2 0 0 0
## 3 0 0 1
## dia_semanaSEGUNDA.FEIRA dia_semanaSEXTA.FEIRA dia_semanaTERÇA.FEIRA
## 1 0 1 0
## 2 0 1 0
## 3 0 0 0
## automoveis divisao_da_viaBLOCOS divisao_da_viaCANAL
## 1 1 0 0
## 2 2 0 0
## 3 1 0 0
## divisao_da_viaCANTEIRO.CENTRAL divisao_da_viaFAIXA
## 1 0 0
## 2 0 0
## 3 0 0
## divisao_da_viaFAIXA.CONTÍNUA divisao_da_viaFAIXA.SECCIONADA
## 1 1 0
## 2 0 0
## 3 0 0
## divisao_da_viaNÃO.EXISTE divisao_da_viaNAO.INFORMADO divisao_da_viaOUTROS
## 1 0 0 0
## 2 1 0 0
## 3 1 0 0
## outros_envolvidos total_acidentes_com_vitimas_por_bairro
## 1 0 80
## 2 0 34
## 3 0 10
# deve-se somente converter em factor se nao for usar Regressão Linear como um dos metodos
sinistrosRecifeBinarizado$acidente_com_vitima = as.factor(sinistrosRecifeBinarizado$acidente_com_vitima)
particao_sinistros = caret::createDataPartition(sinistrosRecifeBinarizado$acidente_com_vitima, p=.7, list = F) # cria a partição 70-30
treino_sinistros = sinistrosRecifeBinarizado[particao_sinistros, ] # treino
teste_sinistros = sinistrosRecifeBinarizado[-particao_sinistros, ] # - treino = teste
# Controle de treinamento
train.control <- trainControl(method = "cv", number = 10, verboseIter = T) # controle de treino
## + Fold01: mtry= 2
## - Fold01: mtry= 2
## + Fold01: mtry=45
## - Fold01: mtry=45
## + Fold01: mtry=88
## - Fold01: mtry=88
## + Fold02: mtry= 2
## - Fold02: mtry= 2
## + Fold02: mtry=45
## - Fold02: mtry=45
## + Fold02: mtry=88
## - Fold02: mtry=88
## + Fold03: mtry= 2
## - Fold03: mtry= 2
## + Fold03: mtry=45
## - Fold03: mtry=45
## + Fold03: mtry=88
## - Fold03: mtry=88
## + Fold04: mtry= 2
## - Fold04: mtry= 2
## + Fold04: mtry=45
## - Fold04: mtry=45
## + Fold04: mtry=88
## - Fold04: mtry=88
## + Fold05: mtry= 2
## - Fold05: mtry= 2
## + Fold05: mtry=45
## - Fold05: mtry=45
## + Fold05: mtry=88
## - Fold05: mtry=88
## + Fold06: mtry= 2
## - Fold06: mtry= 2
## + Fold06: mtry=45
## - Fold06: mtry=45
## + Fold06: mtry=88
## - Fold06: mtry=88
## + Fold07: mtry= 2
## - Fold07: mtry= 2
## + Fold07: mtry=45
## - Fold07: mtry=45
## + Fold07: mtry=88
## - Fold07: mtry=88
## + Fold08: mtry= 2
## - Fold08: mtry= 2
## + Fold08: mtry=45
## - Fold08: mtry=45
## + Fold08: mtry=88
## - Fold08: mtry=88
## + Fold09: mtry= 2
## - Fold09: mtry= 2
## + Fold09: mtry=45
## - Fold09: mtry=45
## + Fold09: mtry=88
## - Fold09: mtry=88
## + Fold10: mtry= 2
## - Fold10: mtry= 2
## + Fold10: mtry=45
## - Fold10: mtry=45
## + Fold10: mtry=88
## - Fold10: mtry=88
## Aggregating results
## Selecting tuning parameters
## Fitting mtry = 88 on full training set
plot(sinistros_RF) # evolução do modelo
var_importance <- varImp(sinistros_RF, scale = T) # importância de cada variável
plot(var_importance, top = 20) # plot de importância
## + Fold01: cp=0.02265
## - Fold01: cp=0.02265
## + Fold02: cp=0.02265
## - Fold02: cp=0.02265
## + Fold03: cp=0.02265
## - Fold03: cp=0.02265
## + Fold04: cp=0.02265
## - Fold04: cp=0.02265
## + Fold05: cp=0.02265
## - Fold05: cp=0.02265
## + Fold06: cp=0.02265
## - Fold06: cp=0.02265
## + Fold07: cp=0.02265
## - Fold07: cp=0.02265
## + Fold08: cp=0.02265
## - Fold08: cp=0.02265
## + Fold09: cp=0.02265
## - Fold09: cp=0.02265
## + Fold10: cp=0.02265
## - Fold10: cp=0.02265
## Aggregating results
## Selecting tuning parameters
## Fitting cp = 0.0227 on full training set
fancyRpartPlot(sinistros_RPART$finalModel) # desenho da árvore
var_importance <- varImp(sinistros_RPART)
plot(var_importance, top = 20) # importância das variáveis
sinistros_ADA <- train(acidente_com_vitima ~ ., data = treino_sinistros, method = "glmboost", trControl = train.control)
## + Fold01: mstop=150, prune=no
## - Fold01: mstop=150, prune=no
## + Fold02: mstop=150, prune=no
## - Fold02: mstop=150, prune=no
## + Fold03: mstop=150, prune=no
## - Fold03: mstop=150, prune=no
## + Fold04: mstop=150, prune=no
## - Fold04: mstop=150, prune=no
## + Fold05: mstop=150, prune=no
## - Fold05: mstop=150, prune=no
## + Fold06: mstop=150, prune=no
## - Fold06: mstop=150, prune=no
## + Fold07: mstop=150, prune=no
## - Fold07: mstop=150, prune=no
## + Fold08: mstop=150, prune=no
## - Fold08: mstop=150, prune=no
## + Fold09: mstop=150, prune=no
## - Fold09: mstop=150, prune=no
## + Fold10: mstop=150, prune=no
## - Fold10: mstop=150, prune=no
## Aggregating results
## Selecting tuning parameters
## Fitting mstop = 150, prune = no on full training set
#summary(sinistros_ADA) # sumário
plot(sinistros_ADA) # evolução do modelo
print(sinistros_ADA) # modelo
## Boosted Generalized Linear Model
##
## 1468 samples
## 88 predictor
## 2 classes: '0', '1'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 1321, 1321, 1322, 1322, 1321, 1321, ...
## Resampling results across tuning parameters:
##
## mstop Accuracy Kappa
## 50 0.8760367 0.5509391
## 100 0.8794381 0.5628703
## 150 0.8828394 0.5781570
##
## Tuning parameter 'prune' was held constant at a value of no
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were mstop = 150 and prune = no.
var_importance <- varImp(sinistros_ADA)
plot(var_importance, top = 20) # importância das variáveis
sinistros_KNN <- train(acidente_com_vitima ~ ., data = treino_sinistros, method = "knn", trControl = train.control)
## + Fold01: k=5
## - Fold01: k=5
## + Fold01: k=7
## - Fold01: k=7
## + Fold01: k=9
## - Fold01: k=9
## + Fold02: k=5
## - Fold02: k=5
## + Fold02: k=7
## - Fold02: k=7
## + Fold02: k=9
## - Fold02: k=9
## + Fold03: k=5
## - Fold03: k=5
## + Fold03: k=7
## - Fold03: k=7
## + Fold03: k=9
## - Fold03: k=9
## + Fold04: k=5
## - Fold04: k=5
## + Fold04: k=7
## - Fold04: k=7
## + Fold04: k=9
## - Fold04: k=9
## + Fold05: k=5
## - Fold05: k=5
## + Fold05: k=7
## - Fold05: k=7
## + Fold05: k=9
## - Fold05: k=9
## + Fold06: k=5
## - Fold06: k=5
## + Fold06: k=7
## - Fold06: k=7
## + Fold06: k=9
## - Fold06: k=9
## + Fold07: k=5
## - Fold07: k=5
## + Fold07: k=7
## - Fold07: k=7
## + Fold07: k=9
## - Fold07: k=9
## + Fold08: k=5
## - Fold08: k=5
## + Fold08: k=7
## - Fold08: k=7
## + Fold08: k=9
## - Fold08: k=9
## + Fold09: k=5
## - Fold09: k=5
## + Fold09: k=7
## - Fold09: k=7
## + Fold09: k=9
## - Fold09: k=9
## + Fold10: k=5
## - Fold10: k=5
## + Fold10: k=7
## - Fold10: k=7
## + Fold10: k=9
## - Fold10: k=9
## Aggregating results
## Selecting tuning parameters
## Fitting k = 7 on full training set
# summary(sinistros_KNN) # sumário do modelo de vizinhança
plot(sinistros_KNN)
var_importance <- varImp(sinistros_KNN)
plot(var_importance, top = 20) # importância das variáveis
melhor_modelo <- resamples(list(
#LM = sinistros_LM,
KNN = sinistros_KNN,
RPART = sinistros_RPART,
RF = sinistros_RF,
ADABOOST = sinistros_ADA))
melhor_modelo
##
## Call:
## resamples.default(x = list(KNN = sinistros_KNN, RPART = sinistros_RPART, RF
## = sinistros_RF, ADABOOST = sinistros_ADA))
##
## Models: KNN, RPART, RF, ADABOOST
## Number of resamples: 10
## Performance metrics: Accuracy, Kappa
## Time estimates for: everything, final model fit
summary(melhor_modelo)
##
## Call:
## summary.resamples(object = melhor_modelo)
##
## Models: KNN, RPART, RF, ADABOOST
## Number of resamples: 10
##
## Accuracy
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## KNN 0.8163265 0.8384354 0.8435374 0.8439987 0.8551859 0.8639456 0
## RPART 0.8503401 0.8603229 0.8775510 0.8746669 0.8888967 0.8979592 0
## RF 0.8707483 0.8837597 0.8877551 0.8978334 0.9214193 0.9319728 0
## ADABOOST 0.8424658 0.8690476 0.8843537 0.8828394 0.8911565 0.9315068 0
##
## Kappa
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## KNN 0.3197913 0.3940855 0.4432638 0.4260329 0.4563530 0.5196826 0
## RPART 0.4464766 0.5254149 0.5855512 0.5661974 0.6246062 0.6388206 0
## RF 0.5536199 0.6111716 0.6464390 0.6736003 0.7607615 0.8003260 0
## ADABOOST 0.4110838 0.5192768 0.5987918 0.5781570 0.6233016 0.7734327 0
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 89 28
## 1 43 468
##
## Accuracy : 0.8869
## 95% CI : (0.8595, 0.9106)
## No Information Rate : 0.7898
## P-Value [Acc > NIR] : 1.099e-10
##
## Kappa : 0.6447
##
## Mcnemar's Test P-Value : 0.09661
##
## Sensitivity : 0.6742
## Specificity : 0.9435
## Pos Pred Value : 0.7607
## Neg Pred Value : 0.9159
## Prevalence : 0.2102
## Detection Rate : 0.1417
## Detection Prevalence : 0.1863
## Balanced Accuracy : 0.8089
##
## 'Positive' Class : 0
##
## Reference
## Prediction 0 1
## 0 89 28
## 1 43 468
## [1] 0.6679784
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 76 9
## 1 56 487
##
## Accuracy : 0.8965
## 95% CI : (0.87, 0.9192)
## No Information Rate : 0.7898
## P-Value [Acc > NIR] : 9.503e-13
##
## Kappa : 0.6414
##
## Mcnemar's Test P-Value : 1.159e-08
##
## Sensitivity : 0.5758
## Specificity : 0.9819
## Pos Pred Value : 0.8941
## Neg Pred Value : 0.8969
## Prevalence : 0.2102
## Detection Rate : 0.1210
## Detection Prevalence : 0.1354
## Balanced Accuracy : 0.7788
##
## 'Positive' Class : 0
##
## [1] 0.6679784
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 76 9
## 1 56 487
##
## Accuracy : 0.8965
## 95% CI : (0.87, 0.9192)
## No Information Rate : 0.7898
## P-Value [Acc > NIR] : 9.503e-13
##
## Kappa : 0.6414
##
## Mcnemar's Test P-Value : 1.159e-08
##
## Sensitivity : 0.5758
## Specificity : 0.9819
## Pos Pred Value : 0.8941
## Neg Pred Value : 0.8969
## Prevalence : 0.2102
## Detection Rate : 0.1210
## Detection Prevalence : 0.1354
## Balanced Accuracy : 0.7788
##
## 'Positive' Class : 0
##
## [1] 0.6679784
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 45 22
## 1 87 474
##
## Accuracy : 0.8264
## 95% CI : (0.7945, 0.8553)
## No Information Rate : 0.7898
## P-Value [Acc > NIR] : 0.01242
##
## Kappa : 0.362
##
## Mcnemar's Test P-Value : 8.783e-10
##
## Sensitivity : 0.34091
## Specificity : 0.95565
## Pos Pred Value : 0.67164
## Neg Pred Value : 0.84492
## Prevalence : 0.21019
## Detection Rate : 0.07166
## Detection Prevalence : 0.10669
## Balanced Accuracy : 0.64828
##
## 'Positive' Class : 0
##
## Reference
## Prediction 0 1
## 0 45 22
## 1 87 474
## [1] 0.6679784